package Demo1;

/**
 * Description:
 * Date: 2025-10-11
 * Time: 13:40
 */

//继承是通过关键字 extends 来实现的
    //此时去继承的类Dog 就叫做 子类/派生类； 而被继承的类Animal 就叫做 父类/基类/超类
    //子类与父类的关系就是 is-a的关系 --> Dog是Animal的一种

                              //java中不支持一个类 继承 多个类
public class Dog extends Animal/* extends Cat*/{

    //此时Dog类 和 Cat类都具有一些共性：成员变量name、age相同，成员方法eat()也相同
    //那这些共性就可以提取出来，放到一个新的类中，然后去继承它，这就达到了代码的复用
    //此时Dog就是子类，Animal就是父类了
//    public String name;
//    public int age;
//
//    public void eat() {
//        System.out.println(this.name + "正在吃饭");
//    }


    //构造方法
    //当你没有明确写怎样的构造方法时，这是编译器默认的构造方法
    //之所以是这样，因为父类默认的构造方法不需要初始化
    public Dog() {
        super();
        System.out.println("子类的构造代码块...");
    }

    static {
        System.out.println("子类的静态代码块...");
    }

    {
        System.out.println("子类的实例代码块...");
    }

    //而构造方法的写法时取决于父类的，父子父子，先有父再有子，
    //即当再子类中需要构造初始化时，若是父类中有构造方法需要初始化，需要先帮助父类初始化
    public Dog(String name, int age) {
        //此时通过super()关键字对父类进行初始化，且super()必须放在子类构造方法的第一行
        //因为this()也必须放在第一行，换句话说，super()和this()是不能共存的
        super(name, age);

    }

    public void bark() {
        System.out.println(this.name + "正在汪汪叫...");
    }
}
